home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 001-010 / amok05 / memsystem / doc.textcraft (.txt) next >
IFF Formatted Text  |  1993-11-04  |  6KB  |  65 lines

  1. Übersicht
  2. MemSystem ist ein Speicherverwaltungsmodul, das gegenüber dem Standardmodul "Heap" folgende Vorteile aufweist:
  3.  
  4. * es ist voll Multitaskingfähig, d.h. es kann vom Hauptmodul importiert und von mehreren Tasks aus parallel benutzt werden. Dabei wird allozierter Speicher immer in der MemList des aufrufenden Tasks eingetragen. Bei Beendigung des Tasks (mit RemTask oder bei Process-Termination) wird der gesammte mit MemSystem verwaltete Speicher freigegeben.
  5. * Wird mehr Speicher angefordert als frei ist, wird dies nicht sofort mit NIL beantwortet, sondern ein Requester (Retry/Cancel) erzeugt. Der Benutzer hat somit die Möglichkeit, z.B. einige Workbench-Windows zu schließen, um es dann noch einmal zu probieren. Der Programmieraufwand ist praktisch null, entgegen der sonst Ã¼blichen Methode, dach jedem AllocMem() auf NIL zu testen, den Requester anzuzeigen ...
  6. * System-Deadlocks, die durch extremen Speichermangel hervorgerufen werden können, werden verhindert. Viele Programme erzeugen bei Speichermangel eine Meldung mit AutoRequest() (zB. auch der Modula-Compiler). Es wird aber oft vergessen, daß der Requester selbst auch Speicher benötigt. MemSystem berücksichtigt dies.
  7.  
  8. Außerdem wurden noch einige nützliche Prozeduren implementiert:
  9.  
  10. * Eine vereinfachte AutoRequest()-Prozedur
  11.  
  12. * Prozeduren zum Abbruch des Programms entweder Ã¼ber Retry-Cancel- Requester oder Ã¤hnlich der Arts.Error-Prozedur oder ohne irgendeine Meldung
  13.  
  14.  
  15. Allocate, AllocMem, Deallocate
  16. Diese Prozeduren entsprechen in der Schnittstelle sowie in der Handhabung genau den gleichnamigen Prozeduren von Heap. Allerdings läuft beim allozieren von Speicher für das aufrufende Programm unsichtbar noch folgendes ab:
  17. * Es wird getestet, ob Size+MinMemory Speicher frei ist.
  18. * falls nicht wird ein Requester (Low Memory Warning Retry/Cancel) erzeugt. Bei "Retry" wird noch einmal versucht, die angeforderte Speichermenge zur verfügung zu stellen. Bei "Cancel" wird NIL zurückgegeben, wie man es von Heap bei Speichermangel kennt.
  19. * falls doch wird der Speicher wie gewohnt alloziert. Der Speicherbereich wird in der MemList des aufrufenden Tasks oder Prozesses registriert. Einwandfreie Funktion ist auch bei mehreren parallellaufenden Tasks, die auch unabhängig voneinander erzeugt und terminiert werden können, gewährleistet. Die Prozeduren sind reentrant.
  20.  
  21. Ein Deallozieren von Speicher, den man gar nicht alloziert hat führt nicht zum Guru, sondern wird abgefangen.
  22.  
  23. YesNoRequest
  24. Dies ist eine Vereinfachung von AutoRequest(). Sie wird intern von Allocate, AllocMem (bei Speichermangel) und von RecoverableExit verwendet. Als "Zugabe" wurde die Prozedur auch im Definition-Module aufgeführt und somit für jedermann zugänglich gemacht. Die Parameter dürften selbsterklärend sein (siehe auch Intuition.AutoRequest).
  25. RecoverableExit
  26. Dies ist gewissermaßen die Kombination aus Arts.BreakPoint und Arts.Error. Während BreakPoint nach beantworten des Requesters immer weitermacht, und Error immer abbricht, kann der Benutzer bei RecoverableExit selbst entscheiden.
  27. Die Prozedur verwndet die Variablen Window und ErrHeader (siehe dort).
  28.  
  29. ReqBody: Zeiger auf den String der "Requester-Überschrift"
  30. PosText: Zeiger auf den Text im linken Gadget (Programm fortsetzen)
  31. NegText: Zeiger auf den Text des rechten Gadget (abbrechen)
  32.  
  33. DeadEndExit
  34. Entspricht Arts.Error, mit dem Unterschied, daß nicht die häßliche Meldung "Modula-2 Programmunterbruch" erscheint. Stattdessen wird ErrHeader (siehe unten) und darunter ReqBody angezeigt.
  35.  
  36. ExitQuiet
  37. ermöglicht das korrekte beenden des Programms von jeder beliebigen Stelle aus (auch vom 671sten rekursiven Funktionsaufruf...). Ebenso wie auch bei DeadEndExit und RecoverableExit funktioniert hierbei der TermProcedure-Mechanismus ordnungsgemäß.
  38.  
  39. Window
  40. Diese Variable wird beim Aufruf von AutoRequest() durch MemSystem verwendet und sollte vor Verwendung von Prozeduren dieses Moduls initialisiert werden. Zwar funktioniert meines Wissens nach auch alles einwandfrei, wenn "Window" nicht initialisiert ist bzw. auf NIL steht, aber mit rücksicht auf die Aufwärtskompatiblität sollte man sich trotzdem an die Konventionen halten.
  41.  
  42. ErrHeader
  43. Ist die Ãœberschrift jedes Requesters, der von MemSystem erzeugt wird.
  44.  
  45. minMemory
  46. gibt die größe des Speichers an, der minimal noch freibleiben muß, damit die korrekte Funktion des Systems gewährleistet ist. Default ist 20kB, was für einige Notfall-Requester oder Alerts ausreicht.
  47.  
  48. Hysteresis
  49. Damit nach einem Speichermangel wieder Speicher alloziert werden kann, muß mindestens minMemory+Hysteresis Speicher frei sein. Die Hysterese wurde eingeführt, damit bei einem Arbeiten an der minMemory-Grenze nicht all paar Sekunden ein Requester erscheint, sondern der Speicher nach einem erfolgreichen "Retry" wieder für eine Weile reicht. Default ist 30kB.
  50.  
  51. Konstanten
  52. Für die Prozeduren YesNoRequest und RecoverableExit werden einige vordefinierte Texte wie z.B. "Retry", "Cancel" usw. bereitgestellt, um den Aufwand des Arbeitens mit MemSystem möglichst gering zu halten.
  53.  
  54. Multitasking
  55. Die Multitaskingfähigkeit von MemSystem hat natürlich nur einen Sinn, wenn auch in Modula Multitasking programmiert werden kann. Zur Zeit arbeite ich gerade an einem Modul, das diese Fähigkeiten in Modula unterstützt. "TaskSupport" wird wahrscheinlich auf einer der nächsten Amok-Disketten erscheinen. Als Warnung sei gesagt, daß die Prozedur ExecSupport.CreateTask zumindest bis zur Compilerversion 3.11d nicht einwandfrei funktioniert (stürzt manchmal und nicht reproduzierbar ab). Falls jemand schon Erfahrungen mit Multitasking in Modula gemacht hat, würde es mich freuen, wenn er sich mit mir in Verbindung setzen würde.
  56.  
  57. ___________________________
  58.  
  59. Viel Spaß mit MemSystem!
  60.  
  61. BeneDokumentation zu "MemSystem" Version 1.1Seite 
  62. Autor: Nicolas Benezan, Postwiesenstr.2, 7000 Stuttgart 60
  63. Verbessertes "Heap" und Autorequester-Hilfen
  64.  
  65.